在我們這個快速變化的時代,一個細微的變化,可能就會造成一個大災難,因此我們希望能夠在第一時間,就能夠發現這些細微的變化,並且能夠及時的處理,因此我們希望能夠透過機器學習的方式,來幫助我們做到這件事情。
但在還沒說到機器學習之前,我們要有資料設計的概念,因為我們要透過資料設計,來幫助我們做到這件事情,因此我們要先來看看,我們要怎麼設計資料,才能夠幫助我們做到這件事情。
傳統上,我們是因為「需求」所以「設計」。
就好像我們有一個萬能的廚師,今天客人跑進來,就說「我要一個大麥克」
然後我們為了「大麥克」設計了一個專屬的「大麥克」的生產步驟,這個生產步驟還用了很有名的「敏捷」開發法。
但問題是,我們的客人,可能不只是要「大麥克」,他可能還要「麥香雞」、「麥克雞塊」、「麥香魚」、「雙層牛肉吉士堡」、「麥脆雞腿」、「麥香雞腿」一堆東西。
如果按照我們設計大麥克的方法,我們需要一個品項,就要設計一個生產步驟,這樣的話,我們的生產線會變得非常的複雜,而且我們的廚師,也會變得非常的累。
但在還沒有其他需求進來的之前,我們是如何得知客人要的是「大麥克」還是「麥香雞」呢?
在每次客人點餐時,我們可能都會同時接到其他的需求,這時候我們可以累積這些需求的資料,然後透過這些資料,來幫助我們分析大部分人都會點什麼。
基於這些需求,我們可以推估出,大部分都是「漢堡」和「炸物」兩種。
那麼我們就可以依據這兩個類別,來設計我們的生產線,這樣的話,我們的生產線就會變得簡單許多,而且我們的廚師也不會那麼累。
我們根本不需要知道下一個客人要點什麼,我們只需要知道,大部分的客人都會點什麼,即可。
有一個很大的問題是,我們的資料,是來自於客人的需求,但是我們的客人,可能不會告訴我們他們的需求,或者他們的需求可能會隨著時間改變。
或者是我們給他的「選擇」就是「A」和「B」,那麼我們根本不知道「C」才是最佳答案。
所以單純依靠數據,來做決策,是有可能會有漏洞的。
因為所有的數據來源,都是已知選擇的結果,但是我們不知道,還有其他的選擇,依然記得有一個台灣知名的購物網站說,他們的網站長年都處於一個「雜亂」風的設計,這個風格不但老舊而且毫無創意,一直被人反問為何不修改。
但老總說「因為我們改了設計,客人就找不到東西了,所以我們就不改了」。
這個說法沒問題,問題是老總不理解的是,客人找不到東西,是因為他們的設計不好,所以客人才找不到東西,而不是因為客人不會找。
也不是因為「改了」設計。
你現在的手機,跟十年前的手機,是不是差很多?那你還不是學會了。
在軟體設計上,資料的設計複雜度可以直接影響後續維護和開發的難度,一個好的資訊設計是必要的。
就好比電話,電話會因為每個國家的不同而產生出不同的國際區碼,這個國際區碼,加上電話號碼,就可以接通電話。
這個時候電話號碼就不僅僅是一串數字,他還依賴了國家,這樣的設計,就可以讓我們在撥打電話時,不需要知道對方的國家,只要知道對方的電話號碼,就可以撥打電話。
那這樣的設計,我們的數據結構應該是要怎麼做呢?能不能直接就是一個「電話號碼」呢?
數據本無形,但是我們可以透過數據的變形,來幫助我們做到這件事情。
我這裡說的型態,不是數據庫的資料型態,而是展示在客戶端的「型態」
當我們在設計數據結構的時候,還需要考慮它的關係和結構,或許很多人會認為,那是後端的事情,但是我們在設計數據結構的時候,就要考慮到這些問題。
雖然我們在軟體設計的時候,一直強調解構。我們之所以要解構,是因為我們要把複雜的問題,拆解成為簡單的問題,然後再把簡單的問題,拼湊成為複雜的問題。
如果沒有分拆又組合的過程,就會變成我們「大麥克」的例子,一個品項,就要設計一個生產步驟。
所以其實每一個步驟,都是依依相關的,但是我們要把這些步驟,拆解成為獨立的步驟,然後再把這些步驟,組合成為一個完整的步驟。
我們經常說要「跳出框架」,但是我們要跳出框架,就需要理解「框架」在那裡,然後再跳出去。
適當的理解框架,可以幫助我們更好的設計資料,這樣的話,我們就可以在不同的框架中,來回切換,而不會因為框架的變化,而影響到我們的資料設計。